package service;

import dao.MenuDao;
import entity.*;
import org.apache.ibatis.jdbc.Null;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import javax.servlet.http.HttpSession;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Service
public class MenuServiceImpl implements MenuService{
    @Autowired
    MenuDao md;

    //批量修改材料
    @Override
    public Integer updateMs(List mslist) {
        int j=0,all1 = 0,all2=0;
        List list=new ArrayList();
        for(int i=0;i<mslist.size();i++) {
            Ms s=(Ms)mslist.get(i);
            if(s.getMsid()==null){//新增
                all2++;
                list.add(s);

            }else {//修改
                j = md.updateMs(s);
            }
           all1+=j;
        }
        //新增
        if(list.size()>0){
            md.addMs(list);
        }
        if(all1<mslist.size()-all2 ){
            return 0;
        }
        return 1;
    }

    //批量修改步骤
    @Override
    public Integer updateStep(List steplist) {
        int j=0,all1 = 0,all2=0;
        List list=new ArrayList();
        for(int i=0;i<steplist.size();i++) {
            Step s=(Step)steplist.get(i);
            System.out.print(s.getStepid()+"asdass");
            if(s.getStepid()==null||"".equals(s.getStepid()) || "undefined".equals(s.getStepid())){//新增
                all2++;
                list.add(s);
            }else {//修改
                j = md.updateStep(s);
            }
            all1+=j;
        }
        //新增
        int f=0;
        System.out.print(list+"asdasd");
        if(list.size()>0){
            f=md.addStep(list);
        }

        if(all1<steplist.size()-all2){
            return 0;
        }
        return 1;
    }

    //修改菜谱详情页的菜谱信息
    @Override
    public Integer updateMenu(Menu menu) {
        return md.updateMenu(menu);
    }

    //查询菜谱列表
    @Override
    public Map findAll(Integer delstatus, Integer uroleid,Integer page, Integer count, HttpSession session) {
        System.out.println(delstatus+"q"+page+"a"+count+"asda1");
        //根据登陆者的角色和删除状态id为查询数据
        Map m=new HashMap();
        m.put("delstatus",delstatus);
        // 判断登陆后的user的uroleid 先固定为2普通用户 就要把用户id传入，1超级管理员就传null

        m.put("muserid",uroleid);
        m.put("index",(page-1)*count);
        m.put("count",count);
        //分页查询菜谱
        List menus= md.findAll(m);
        //查询用户数量m
        Integer total=md.findMenus(m);
        //返回数据
        Map m2=new HashMap();
        m2.put("menus",menus);
        m2.put("total",total);
        return  m2;
    }

    //根据菜谱id物理删除或者恢复一个菜谱,修改删除状态
    @Override
    public int updateDelstatus(Integer menuid,Integer number) {
        int i=0;
        if(number==2){ //number：1是物理删除操作传入要物理删除的menuid
             i=  md.updateDelstatus(2,menuid);
        }else if(number==1){//number：2是恢复操作传入要恢复的menuid
            i=  md.updateDelstatus(1,menuid);
        }else if(number==3){//umber：3是永久删除操作传入要永久删除的menuid
            //删除这个菜谱在数据库中(三个表)的数据
            i= md.removeMenu(menuid);
            //删除这个菜谱在服务器中(主体和步骤)的图片
           // File file = new File(mimg);
           // file.delete
        }
        return i;
    }

    //查询菜谱类型
    @Override
    public List findType() {
        return md.findType();
    }

    //添加菜谱表和步骤表以及材料表数据
    @Override
    public int addMenuAll(Menu menu, EntityList entityList) {//后面的是步骤表以及材料表的实体类映射
        //添加菜谱表数据
        //还差当前用户idmuserid(要先登陆) 先固定为1
        menu.setMuserid(1);
        int menuNum=md.addMenu(menu);//添加好后,主键会自动生成到实体类中，下面就可以在实体类中获取menuid

        //添加步骤表数据
        for(int i=0;i<entityList.getStepList().size();i++){
            //添加菜谱id
            entityList.getStepList().get(i).setSmenuid(menu.getMenuid());
        }
        int stepNum=md.addStep(entityList.getStepList());

        //添加材料表数据
        for(int i=0;i<entityList.getMsList().size();i++) {
            //添加菜谱id
            entityList.getMsList().get(i).setMsmenuid(menu.getMenuid());
        }
        int msNum=md.addMs(entityList.getMsList());

        return menuNum+stepNum+msNum;
    }

    //菜谱详情页 根据菜谱id查询菜谱对应材料和步骤信息(返回Map)
    @Override
    public Map findMenuAll(Integer menuid) {
        Map m=new HashMap();
        //根据菜谱id查询菜谱对应材料信息(返回集合)
        List msList=md.findMsByMenuid(menuid);
        m.put("msList",msList);
        //根据菜谱id查询菜谱对应步骤信息(返回集合)
        List stepList=md.findStepByMenuid(menuid);
        m.put("stepList",stepList);
        //根据菜谱id查询对应菜谱、作者和菜谱类型信息
        MenuUserType menus=md.findUserAndType(menuid);
        m.put("menus",menus);
        return m;
    }


}
